<?php
// 管理微信服务号用户
namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Log;
use App\Models\UserToken;
use App\Models\Order; // 添加此行引入Order模型

class WechatServiceAccountUser extends Authenticatable
{
    use Notifiable;
    
    /**
     * 禁用remember_token功能
     * @var bool
     */
    protected $rememberTokenName = false;

    /**
     * 关联到模型的数据表
     *
     * @var string
     */
    protected $table = 'wechat_service_account_users';

    /**
     * 可批量赋值的属性
     *
     * @var array
     */
    protected $fillable = [
        'openid',
        'nickname',
        'avatar',
        'gender',
        'city',
        'province',
        'country',
        'unionid',
        'session_key',
        'session_expires_at',
        'access_token',          // 加密后的token
        'access_token_expires_at', // token过期时间
        // 其他需要批量赋值的字段...
    ];

    /**
     * 应该被隐藏的序列化属性
     *
     * @var array
     */
    protected $hidden = [
        'access_token', // 加密后也隐藏
    ];

    /**
     * 获取解密后的access_token
     *
     * @return string|null
     */
    public function getDecryptedTokenAttribute()
    {
        try {
            return $this->access_token ? decrypt($this->access_token) : null;
        } catch (\Exception $e) {
            Log::error('Token解密失败', [
                'user_id' => $this->id,
                'error' => $e->getMessage()
            ]);
            return null;
        }
    }

    /**
     * 检查token是否有效
     *
     * @return bool
     */
    public function getIsTokenValidAttribute()
    {
        return $this->access_token && 
               $this->access_token_expires_at &&
               $this->access_token_expires_at > now();
    }

    /**
     * 获取用户的所有Token
     */
    public function tokens()
    {
        return $this->hasMany(UserToken::class, 'wechat_user_id');
    }

    /**
     * 获取用户的所有订单
     */
    public function orders()
    {
        return $this->hasMany(Order::class, 'wechat_service_account_user_id');
    }
}